home *** CD-ROM | disk | FTP | other *** search
- package org.apache.xalan.xpath;
-
- import com.ibm.bsf.BSFEngine;
- import com.ibm.bsf.BSFException;
- import com.ibm.bsf.BSFManager;
- import com.ibm.cs.util.ReflectionUtils;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- import java.util.Hashtable;
- import java.util.StringTokenizer;
- import java.util.Vector;
-
- public class ExtensionFunctionHandler {
- public String namespaceUri;
- public String scriptLang;
- public String scriptSrc;
- public String scriptSrcURL;
- public Object javaObject;
- protected boolean hasCalledCTor;
- public Class classObject;
- protected Hashtable functions;
- protected Hashtable elements;
- protected BSFManager mgr;
- protected boolean componentStarted;
- Hashtable m_cachedMethods;
- protected static boolean bsfInitialized;
- // $FF: synthetic field
- static Class class$java$lang$Double;
- // $FF: synthetic field
- static Class class$java$lang$Float;
- // $FF: synthetic field
- static Class class$java$lang$Boolean;
- // $FF: synthetic field
- static Class class$java$lang$Byte;
- // $FF: synthetic field
- static Class class$java$lang$Character;
- // $FF: synthetic field
- static Class class$java$lang$Short;
- // $FF: synthetic field
- static Class class$java$lang$Integer;
- // $FF: synthetic field
- static Class class$java$lang$Long;
- // $FF: synthetic field
- static Class class$com$ibm$bsf$BSFManager;
-
- public ExtensionFunctionHandler(String var1) {
- this.scriptLang = "javaclass";
- this.hasCalledCTor = false;
- this.functions = new Hashtable();
- this.elements = new Hashtable();
- this.namespaceUri = var1;
- }
-
- public ExtensionFunctionHandler(String var1, String var2, String var3, String var4, String var5) {
- this(var1);
- this.setFunctions(var2);
- this.setScript(var3, var4, var5);
- }
-
- public void setFunctions(String var1) {
- if (var1 != null) {
- StringTokenizer var2 = new StringTokenizer(var1, " \t\n\r", false);
- Object var3 = new Object();
-
- while(var2.hasMoreTokens()) {
- String var4 = var2.nextToken();
- this.functions.put(var4, var3);
- }
-
- }
- }
-
- public void setElements(String var1) {
- if (var1 != null) {
- StringTokenizer var2 = new StringTokenizer(var1, " \t\n\r", false);
- Object var3 = new Object();
-
- while(var2.hasMoreTokens()) {
- String var4 = var2.nextToken();
- this.elements.put(var4, var3);
- }
-
- }
- }
-
- public void setScript(String var1, String var2, String var3) {
- this.scriptLang = var1;
- this.scriptSrcURL = var2;
- this.scriptSrc = var3;
- }
-
- public boolean isFunctionAvailable(String var1) {
- return this.functions.get(var1) != null;
- }
-
- public boolean isElementAvailable(String var1) {
- return this.elements.get(var1) != null;
- }
-
- public Object callJava(Object var1, String var2, Object[] var3, Object var4) throws BSFException {
- int var5 = var2.lastIndexOf(".");
- Object var6 = null;
- boolean var7 = false;
- if (var5 == -1) {
- var1 = var3[0];
- if (var3.length > 1) {
- var6 = new Object[var3.length - 1];
- System.arraycopy(var3, 1, var6, 0, var3.length - 1);
- } else {
- var6 = null;
- }
- } else {
- String var8 = var2.substring(0, var5);
- var2 = var2.substring(var5 + 1);
- var6 = var3;
- var7 = var2.equals("new");
-
- try {
- if (var1 == null) {
- var1 = Class.forName(var8);
- }
- } catch (ClassNotFoundException var14) {
- throw new BSFException(1, "unable to load class '" + var8 + "'", var14);
- }
- }
-
- if (this.m_cachedMethods != null && !var7 && var1 != null) {
- try {
- Method var18 = (Method)this.m_cachedMethods.get(var4);
- if (var18 != null) {
- return var18.invoke(var1, (Object[])var6);
- }
- } catch (Exception var13) {
- }
- }
-
- Class[] var19 = null;
- if (var6 != null) {
- var19 = new Class[((Object[])var6).length];
-
- for(int var9 = 0; var9 < var19.length; ++var9) {
- var19[var9] = ((Object[])var6)[var9] != null ? ((Object[])var6)[var9].getClass() : null;
- }
- }
-
- boolean var20 = false;
- boolean var10 = false;
-
- try {
- while(!var20) {
- if (var6 == null) {
- var20 = true;
- } else if (!var10) {
- for(int var21 = 0; var21 < var19.length; ++var21) {
- Class var25 = var19[var21];
- if (var25 != null) {
- if (var25 == (class$java$lang$Double != null ? class$java$lang$Double : (class$java$lang$Double = class$("java.lang.Double")))) {
- var25 = Double.TYPE;
- }
-
- if (var25 == (class$java$lang$Float != null ? class$java$lang$Float : (class$java$lang$Float = class$("java.lang.Float")))) {
- var25 = Float.TYPE;
- } else if (var25 == (class$java$lang$Boolean != null ? class$java$lang$Boolean : (class$java$lang$Boolean = class$("java.lang.Boolean")))) {
- var25 = Boolean.TYPE;
- } else if (var25 == (class$java$lang$Byte != null ? class$java$lang$Byte : (class$java$lang$Byte = class$("java.lang.Byte")))) {
- var25 = Byte.TYPE;
- } else if (var25 == (class$java$lang$Character != null ? class$java$lang$Character : (class$java$lang$Character = class$("java.lang.Character")))) {
- var25 = Character.TYPE;
- } else if (var25 == (class$java$lang$Short != null ? class$java$lang$Short : (class$java$lang$Short = class$("java.lang.Short")))) {
- var25 = Short.TYPE;
- } else if (var25 == (class$java$lang$Integer != null ? class$java$lang$Integer : (class$java$lang$Integer = class$("java.lang.Integer")))) {
- var25 = Integer.TYPE;
- } else if (var25 == (class$java$lang$Long != null ? class$java$lang$Long : (class$java$lang$Long = class$("java.lang.Long")))) {
- var25 = Long.TYPE;
- }
-
- var19[var21] = var25;
- }
- }
-
- var10 = true;
- } else {
- for(int var11 = 0; var11 < var19.length; ++var11) {
- Class var24 = var19[var11];
- if (var24 != null) {
- if (var24 == Double.TYPE) {
- var24 = class$java$lang$Double != null ? class$java$lang$Double : (class$java$lang$Double = class$("java.lang.Double"));
- }
-
- if (var24 == Float.TYPE) {
- var24 = class$java$lang$Float != null ? class$java$lang$Float : (class$java$lang$Float = class$("java.lang.Float"));
- } else if (var24 == Boolean.TYPE) {
- var24 = class$java$lang$Boolean != null ? class$java$lang$Boolean : (class$java$lang$Boolean = class$("java.lang.Boolean"));
- } else if (var24 == Byte.TYPE) {
- var24 = class$java$lang$Byte != null ? class$java$lang$Byte : (class$java$lang$Byte = class$("java.lang.Byte"));
- } else if (var24 == Character.TYPE) {
- var24 = class$java$lang$Character != null ? class$java$lang$Character : (class$java$lang$Character = class$("java.lang.Character"));
- } else if (var24 == Short.TYPE) {
- var24 = class$java$lang$Short != null ? class$java$lang$Short : (class$java$lang$Short = class$("java.lang.Short"));
- } else if (var24 == Integer.TYPE) {
- var24 = class$java$lang$Integer != null ? class$java$lang$Integer : (class$java$lang$Integer = class$("java.lang.Integer"));
- } else if (var24 == Long.TYPE) {
- var24 = class$java$lang$Long != null ? class$java$lang$Long : (class$java$lang$Long = class$("java.lang.Long"));
- }
-
- var19[var11] = var24;
- }
- }
-
- var20 = true;
- }
-
- try {
- if (var7) {
- Constructor var23 = ReflectionUtils.getConstructor((Class)var1, var19);
- Object var27 = var23.newInstance((Object[])var6);
- return var27;
- }
-
- Method var22 = ReflectionUtils.getMethod(var1, var2, var19);
- Object var26 = var22.invoke(var1, (Object[])var6);
- if (!var7) {
- if (this.m_cachedMethods == null) {
- this.m_cachedMethods = new Hashtable();
- }
-
- this.m_cachedMethods.put(var4, var22);
- }
-
- return var26;
- } catch (NoSuchMethodException var15) {
- if (var20) {
- throw var15;
- }
- }
- }
-
- return null;
- } catch (Exception var16) {
- Throwable var12 = var16 instanceof InvocationTargetException ? ((InvocationTargetException)var16).getTargetException() : null;
- throw new BSFException(BSFException.REASON_OTHER_ERROR, "method call/new failed: " + var16 + (var12 == null ? "" : " target exception: " + var12), var12);
- }
- }
-
- public Object callFunction(String var1, Vector var2, Object var3, Class var4) throws XPathException {
- if (!this.componentStarted) {
- this.startupComponent(var4);
- }
-
- boolean var5 = false;
-
- try {
- if (this.mgr == null) {
- this.mgr = new BSFManager();
- }
-
- boolean var9 = false;
- BSFEngine var6;
- byte var8;
- Object[] var13;
- if (this.scriptLang.equals("javaclass")) {
- var5 = true;
- var9 = var1.equals("new");
- var6 = this.mgr.loadScriptingEngine("xslt-javaclass");
- if (var9) {
- var13 = new Object[var2.size()];
- var8 = 0;
- var1 = this.classObject.getName() + ".new";
- this.javaObject = null;
- this.hasCalledCTor = true;
- } else if (!this.hasCalledCTor) {
- if (this.javaObject == null) {
- this.javaObject = this.classObject.newInstance();
- }
-
- var13 = new Object[var2.size() + 1];
- var13[0] = this.javaObject;
- var8 = 1;
- } else {
- var13 = new Object[var2.size()];
- var8 = 0;
- }
- } else {
- var6 = this.mgr.loadScriptingEngine(this.scriptLang);
- var13 = new Object[var2.size()];
- var8 = 0;
- }
-
- for(int var10 = 0; var10 < var2.size(); ++var10) {
- Object var11 = var2.elementAt(var10);
- var13[var10 + var8] = var11 instanceof XObject ? ((XObject)var11).object() : var11;
- }
-
- if (var5) {
- return this.callJava(this.javaObject, var1, var13, var3);
- } else {
- return var6.call((Object)null, var1, var13);
- }
- } catch (Exception var12) {
- String var7 = ((Throwable)var12).getMessage();
- if (var7 != null) {
- if (var7.startsWith("Stopping after fatal error:")) {
- var7 = var7.substring("Stopping after fatal error:".length());
- }
-
- System.out.println("Call to extension function failed: " + var7);
- return new XNull();
- } else {
- throw new XPathProcessorException("Extension not found");
- }
- }
- }
-
- protected void startupComponent(Class var1) throws XPathProcessorException {
- if (!bsfInitialized) {
- Class var2 = class$com$ibm$bsf$BSFManager != null ? class$com$ibm$bsf$BSFManager : (class$com$ibm$bsf$BSFManager = class$("com.ibm.bsf.BSFManager"));
- synchronized(var2){}
-
- try {
- bsfInitialized = true;
- BSFManager.registerScriptingEngine("xslt-javaclass", "org.apache.xalan.xpath.XSLTJavaClassEngine", new String[0]);
- } catch (Throwable var9) {
- throw var9;
- }
- }
-
- if (var1 != null) {
- this.classObject = var1;
- if (this.scriptSrcURL.startsWith("class:")) {
- this.javaObject = var1;
- }
-
- } else if (this.scriptLang.equals("javaclass") && this.scriptSrcURL != null) {
- try {
- String var10 = this.scriptSrcURL;
- boolean var3 = false;
- if (this.scriptSrcURL.startsWith("class:")) {
- var10 = this.scriptSrcURL.substring(6);
- var3 = true;
- }
-
- this.classObject = Class.forName(var10);
- if (var3) {
- this.javaObject = this.classObject;
- }
-
- this.componentStarted = true;
- } catch (Exception var7) {
- throw new XPathProcessorException(((Throwable)var7).getMessage(), var7);
- }
- } else if (this.scriptSrcURL != null) {
- throw new XPathProcessorException("src attr not supported (yet)");
- } else if (this.scriptSrc != null) {
- if (this.mgr == null) {
- this.mgr = new BSFManager();
- }
-
- try {
- this.mgr.exec(this.scriptLang, "LotusXSLScript", -1, -1, this.scriptSrc);
- } catch (BSFException var8) {
- throw new XPathProcessorException(((Throwable)var8).getMessage(), var8);
- }
-
- this.componentStarted = true;
- }
- }
-
- // $FF: synthetic method
- static Class class$(String var0) {
- try {
- return Class.forName(var0);
- } catch (ClassNotFoundException var2) {
- throw new NoClassDefFoundError(((Throwable)var2).getMessage());
- }
- }
- }
-